package com.joinval.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式
 */
public class RegularUtils {

    /** 电话正则表达式（无区号）*/
    private static final String PHONE = "^[1-9]{1}[0-9]{5,8}$";

    /** 电话正则表达式（有区号）*/
    private static final String PHONE_AREA_CODE = "^[0][1-9]{2,3}-[0-9]{5,10}$";

    /** 手机号正则表达式*/
    private static final String MOBILE = "^[1][3,4,5,7,8][0-9]{9}$";

    /** 版本号表达式*/
    private static final String VERSION = "^[v,V]([1-9]\\d|[1-9])(.([1-9]\\d|\\d)){2}$";

    /** 密码表达式（密码设定规则：8-16位，其中必须包含数字、小写字母、大写字母、特殊字符；字符仅支持“!@#$%^&”，不支持空格）*/
//     private static final String PASSWORD = "^(?!.*[！·（）{}【】“”：；，》￥、。‘’——\\s-……%\\n])(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[~!@#$%^&*()_+`\\-={}:\";'<>?,.\\/])[^\\u4e00-\\u9fa5]{8,16}$";
     private static final String PASSWORD = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&])[A-Za-z\\d!@#$%^&]{8,16}";

    /**
     * 版本号验证
     * @param str
     * @return
     */
    public static boolean isVersion(final String str) {
        Pattern p = null;
        Matcher m = null;
        boolean b = false;
        p = Pattern.compile(VERSION); // 验证版本
        m = p.matcher(str);
        b = m.matches();
        return b;
    }


    /**
     * 手机号验证
     * @param str
     * @return 验证通过返回true
     */
    public static boolean isMobile(final String str) {
        Pattern p = null;
        Matcher m = null;
        boolean b = false;
        p = Pattern.compile(MOBILE); // 验证手机号
        m = p.matcher(str);
        b = m.matches();
        return b;
    }
    /**
     * 电话号码验证
     * @param str
     * @return 验证通过返回true
     */
    public static boolean isPhone(final String str) {
        Pattern p1 = null, p2 = null;
        Matcher m = null;
        boolean b = false;
        p1 = Pattern.compile(PHONE_AREA_CODE); // 验证带区号的
        p2 = Pattern.compile(PHONE); // 验证没有区号的
        if(p1.matcher(str).matches() || p2.matcher(str).matches()) {
            return true;
        }else {
            return false;
        }
    }

    /**
     * 密码验证
     */
    public static boolean isPassword(final String str) {
        Pattern p = null;
        Matcher m = null;
        boolean b = false;
        p = Pattern.compile(PASSWORD); // 验证密码
        m = p.matcher(str);
        b = m.matches();
        return b;
    }

    /**
     * 密码验证长度 ，6～10位
     * 20240722
     */
    public static boolean isPasswordLength(final String str) {
        int l = str ==null ? 0 : str.length();
        return l > 5 && l < 11 ;
    }


}
